// 根据匹配定义求匹配子串的数量
// 给定长为n的字符串s，以及长度为m的字符串p，还有一个正数k
// s'与s匹配的定义为，s'与s长度相同，且最多有k个位置字符不同
// 要求查找字符串s中有多少子串与字符串p匹配
// 测试链接 : https://www.luogu.com.cn/problem/P3763
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 10001;
int base = 499;
long nums[MAXN];
char s[MAXN];
int n;

inline int read()
{
    char ch = getchar();
    int x = 0, f = 1;
    while(ch < '0' || ch > '9')
    {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = 10 * x + ch - '0';
        ch = getchar();
    }
    return f * x;
}

// 数字 + 大写 + 小写
// '0' -> 1
// '1' -> 2
// ...
// '9' -> 10
// 'A' -> 11
// 'B' -> 12
// ...
// 'Z' -> 36
// 'a' -> 37
// ...
// 'z' -> 62
int v(char c)
{
    if(c >= '0' && c <= '9')
        return c - '0' + 1;
    else if(c >= 'A' && c <= 'Z')
        return c - 'A' + 11;
    else 
        return c - 'a' + 37;
}

long value(char* s)
{
    long ans = v(s[0]);
    for(int i = 1; i < strlen(s); ++i)
    {
        ans = ans * base + v(s[i]);
    }
    return ans;
}

int cnt()
{
    sort(nums, nums + n);
    int ans = 1;
    for(int i = 1; i < n; ++i)
    {
        if(nums[i] != nums[i - 1]) ++ans;
    }
    return ans;
}

int main()
{
    n = read();
    for(int i = 0; i < n; ++i)
    {
        scanf("%s", s);
        nums[i] = value(s);
    }
    printf("%d\n", cnt());

    return 0;
}